package com.tanhua.sso.controller;

import com.tanhua.common.pojo.User;
import com.tanhua.sso.service.UserService;
import com.tanhua.sso.vo.ErrorResult;
import com.tanhua.sso.vo.LoginResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@RestController
@RequestMapping("user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 2.对手机号和验证码进行的接口方法
     *
     * @param param
     * @return
     */
    @PostMapping("loginVerification")
    //方法的请求体中包含了用户的手机号以及提交的验证码,我们同样使用map集合将其封装起来
    //该方法有返回值,返回的是一个json字符串,包含一个token,一个isNew(是否为新用户)
    //此处我们还是可以使用ResponseEntity对象去封装返回信息,泛型为Object,因为返回
    //的数据不再唯一,可能是ErrorResult或LoginResult,所以此处需要封装一个LoginResult实体类封装token和isNew属性
    public ResponseEntity<Object> login(@RequestBody Map<String, String> param) {
        //获取手机号和验证码
        String phone = param.get("phone");
        String code = param.get("verificationCode");
        //调用service层方法将手机号和验证码作为参数传递进去,返回一个loginResult结果,LoginResult中封装了两个属性,
        // 一个token和isNew(该属性用于判断是否是新用户)
        LoginResult result = userService.login(phone, code);
        if (result != null) {
            //如果返回值不为空,则说明验证成功,返回状态码200,返回信息将result传递进去
            return ResponseEntity.ok(result);
        }
        ErrorResult errorResult = ErrorResult.builder().errCode("000002").errMessage("登录失败!").build();
        //如果返回值为空,则说明验证失败,返回状态码500并将对应错误信息传递给用户
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResult);
    }

    /**
     * 校验token,根据token查询用户数据
     *
     * @param token
     * @return
     */
    @GetMapping("{token}")
    public User findUserByToken(@PathVariable("token") String token) {
        User user = userService.findUserByToken(token);
        return user;
    }
}
